package com.suray.basic.wcs.plc.pojo.oper.single;

import com.suray.basic.wcs.plc.enums.Location;
import com.suray.basic.wcs.plc.enums.PlcDeviceType;
import com.suray.basic.wcs.plc.utils.PlcTaskType;
import com.suray.basic.wcs.utils.Coord;

import java.io.IOException;

public interface DeviceInterface {

    /**
     * 获取设备名称
     * @return
     */
    String getDeviceName();

    int getDeviceNo();

    /**
     * 获取设备类型
     * @return
     */
    PlcDeviceType getPlcDeviceType();

    /**
     * 是否有货
     * @return
     */
    boolean hasCargo();

    /**
     * 入库光电信号：靠近货架的光电
     * @return
     */
    boolean inCargoSignal();

    /**
     * 出库光电信号：远离货架的光电
     * @return
     */
    boolean outCargoSignal();

    /**
     * 是否允许运行
     * @return
     */
    boolean permitRun();

    /**
     * 允许wcs下发任务
     * @return
     */
    boolean canControl();

    /**
     * 运行中
     * @return
     */
    boolean isRunning();

    /**
     * 故障
     * @return
     */
    boolean isError();

    /**
     * 故障码
     * @return
     */
    Integer errorCode();

    /**
     * 获取设备位置
     * @return
     */
    Coord getCoord();

    /**
     * 获取设备位置
     * @return
     */
    Location getLocation();

    /**
     * 写入设备状态
     * @param des
     */
    void setDeviceStatus(String des);

    /**
     * 获取设备当前任务编号
     * @return
     */
    Integer getTaskNo();

    /**
     * 获取任务起点位置
     * @return
     */
    Integer getTaskStartLocation();

    /**
     * 获取任务终点位置
     * @return
     */
    Integer getTaskEndLocation();

    /**
     * 发送输送任务
     * @param taskNo
     * @param startDeviceNo
     * @param endDeviceNo
     */
    void sendConveryTask(int taskNo, int startDeviceNo, int endDeviceNo) throws IOException;

    /**
     * 清除任务
     */
    void clearTaskNo() throws IOException;

    /**
     * 设置设备类型
     * @throws IOException
     */
    public void setDeviceType()throws IOException;
}
